<?php
namespace app\common\model;
class Base extends \think\Model{
	/**
     * 数据列表查询(更多复杂情况请子模型自行重写)
     * @param  array|string  $where  查询条件
     * @param  int    $page   分页数
     * @param  array  $options 额外参数
     * @return collection
     */
    function readAll($where=[],$page=false,$options=[]){
        $order=isset($options['order'])?$options['order']:'';
        $field=isset($options['field'])?$options['field']:'';
        $or=isset($options['or'])?$options['or']:[];
        $with=isset($options['with'])?$options['with']:'';
        $withCount=isset($options['withCount'])?$options['withCount']:[];
        $group=isset($options['group'])?$options['group']:'';
        if($page){
            $page=is_integer($page)?$page:config('paginate.list_rows');
            if($group){
                return self::where($where)->whereOr($or)->group($options['group'])->order($order)->field($field)->with($with)->withCount($withCount)->paginate($page);
            }
            return self::where($where)->whereOr($or)->order($order)->field($field)->with($with)->withCount($withCount)->paginate($page);
        }
        return self::where($where)->whereOr($or)->group($group)->order($order)->field($field)->with($with)->withCount($withCount)->select();
    }
    /**
     * 单行数据查询(关联查询等请子模型自行重写)
     * @param  int|array|string $id 主键|条件
     * @param  string $field 查找字段
     * @param  array  $options 额外参数
     * @return collection
     */
    function read($id='',$field='*',$options=[]){
        $or=isset($options['or'])?$options['or']:[];
        $with=isset($options['with'])?$options['with']:'';
        $order=isset($options['order'])?$options['order']:'';
        if(is_integer($id)){
            return self::field($field)->with($with)->whereOr($or)->order($order)->find($id);
        }
        return self::where($id)->field($field)->with($with)->whereOr($or)->order($order)->find();
    }
    /**
     * 数据新增
     * @param array $data 新增的数据(可批量新增)
     * @param  string $field 更新字段
     * @return collection
     */
    function add($data,$field=true){
        if(is_integer(key($data))){
            return self::saveAll($data);
        }
        return self::create($data,$field);
    }
    /**
     * 数据编辑
     * @param  array $data   更新的数据(包含主键值可省略$where) (可批量更新)
     * @param  array|string  $where 更新条件
     * @param  array $or  whereOr条件
     * @param  string $field 更新字段
     * @return collection
     */
    function edit($data,$where=[],$or=[],$field=true){
        if(is_integer(key($data))){
            return self::saveAll($data);
        }
        return self::where($where)->whereOr($or)->update($data,[],$field);
    }
    /**
     * 删除数据
     * @param  string|int|array  $where 删除条件
     * @param  array $or  whereOr条件
     * @return int
     */
    function del($where,$or=[]){
        if((!is_array($where)||is_integer(key($where)))&&empty($or)){
            return self::destroy($where);
        }
        return self::where($where)->whereOr($or)->delete();
    }

    /**
     * 单个字段的自动关闭、启用（2018-04-19）
     * @param  array|string  $where 修改的条件
     * @param  array|string  $field 修改的字段或者一个修改数组
     * @param  boolean $auto  是否自动修改
     * @param  array $or  whereOr条件
     * @return [type]         [description]
     */
    function close($where,$field,$auto=false,$or=[]){
        if($auto){ // 自动时 $where必须为字符串
            $table=$this->getTable();
            $sql="update $table set `$field` =(0-`$field`+1) where $where";
            return $this->execute($sql);
        }else{
            return $this->edit($field,$where,$or);
        }
    }
}
